﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SCIE_DAL;
using SCIE_DTL;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;

namespace SCIE_DAL
{
    /// <summary>
    /// Criada em:
    /// Por:
    /// Descrição:
    /// </summary>
    public class MonitorDAO : EquipamentoDAO<MonitorDTO>
    {
        
        internal override IDbCommand CriarComandoInsercao(ITransferenciaDados dto)
        {
            MonitorDTO monitor = (MonitorDTO) dto;

            try
            {
                string sql = "INSERT INTO " + ObterNomeTabela() + "(MARCA,MODELO,CORES,TAMANHO_TELA,"+
                    "TIPO,FREQUENCIA,TIPO_CONEXAO,VOLTAGEM,ETIQUETA) VALUES ('" +
                    monitor.Marca + "','"+monitor.Modelo+"','"+monitor.Cor+"','"+monitor.TamanhoTela+"','"+monitor.Tipo+"','"+monitor.Frequencia+"','"+
                    monitor.TipoConexao+"','"+monitor.Voltagem+"','"+monitor.Etiqueta+"')";

                return factory.CreateCommand(sql);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }

        internal override string ObterNomeTabela()
        {
            try
            {
                string nomeTabela = "MONITOR";
                return nomeTabela;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao Setar o nome da tabela. Descricao do erro: " + e.Message);
            }
        }

        internal override IDbCommand CriarComandoAtualizacao(string etiqueta, MonitorDTO newDto)
        {
            try
            {
                //(MARCA,MODELO,CORES,TAMANHO_TELA,TIPO,FREQUENCIA,TIPO_CONEXAO,VOLTAGEM,ETIQUETA)
                string sql = "UPDATE " + ObterNomeTabela() + " SET MARCA= '" + newDto.Marca + "',MODELO='" + newDto.Modelo + "',"+
                    "CORES='" + newDto.Cor + "',TAMANHO_TELA ='" + newDto.TamanhoTela + "',TIPO='" + newDto.Tipo + "',FREQUENCIA='" + newDto.Frequencia + "',"+
                    "TIPO_CONEXAO ='" + newDto.TipoConexao + "',VOLTAGEM ='" + newDto.Voltagem + "' WHERE ETIQUETA = '" + etiqueta + "';";
                return factory.CreateCommand(sql);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }

        internal override IDbCommand CriarComandoRemocao(string etiqueta)
        {
            try
            {
                string sql = "DELETE " + ObterNomeTabela() + " WHERE ETIQUETA = '" + etiqueta + "';";
                return factory.CreateCommand(sql);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }

        internal override IDbCommand CriarComandoRemocao(MonitorDTO dto)
        {
            try
            {
                string sql = "DELETE " + ObterNomeTabela() + " WHERE ETIQUETA = '" + dto.Etiqueta + "';";
                return factory.CreateCommand(sql);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }

        internal override IDbCommand CriarComandoBuscaEquipamentoPorEtiqueta(string etiqueta)
        {
            try
            {
                string sql = "SELECT * FROM " + ObterNomeTabela() +
                    " A, EQUIPAMENTO B WHERE A.ETIQUETA = '" + etiqueta + "' AND A.ETIQUETA = B.ETIQUETA ;";
                return factory.CreateCommand(sql);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }

        internal override void PopularDto(IDataReader leitor, MonitorDTO equipamento)
        {
            try
            {

                equipamento.Marca = (string)leitor["MARCA"];
                equipamento.Modelo = (string)leitor["MODELO"];
                equipamento.Cor = (bool)leitor["CORES"];
                equipamento.TamanhoTela = (string)leitor["TAMANHO_TELA"];
                equipamento.Tipo = (string)leitor["TIPO"];
                equipamento.Frequencia = (string)leitor["FREQUENCIA"];
                equipamento.TipoConexao = (string)leitor["TIPO_CONEXAO"];
                equipamento.Voltagem = (string)leitor["VOLTAGEM"];
                equipamento.Etiqueta = (string)leitor["ETIQUETA"];
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao popular o dto. Descrição do Erro: " + e.Message);
            }
        }

        internal override IDbCommand CriarComandoBuscarTodos()
        {
            try
            {
                string sql = "SELECT E.*, M.* FROM EQUIPAMENTO AS E INNER JOIN MONITOR AS M ON E.ETIQUETA = M.ETIQUETA ";
                return factory.CreateCommand(sql);
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }
        internal IDbCommand CriarComandoBuscaPorColuna(string coluna, string valor)
        {
            try
            {
                string sql = "SELECT * FROM " + ObterNomeTabela() +
                        " A WHERE A." + coluna + " = '" + valor + "';";
                return factory.CreateCommand(sql);
            }
            catch(Exception e)
            {
                throw new Exception("Erro ao criar o comando Sql. Descrição do Erro: " + e.Message);
            }
        }
    }
}
